/**
 * 检查线上数据库实际情况的脚本
 */

const mongoose = require('mongoose');
require('dotenv').config();

async function checkDatabase() {
  try {
    console.log('🔍 检查线上数据库情况...\n');
    
    // 连接 MongoDB - 使用线上数据库
    const mongoUri = 'mongodb+srv://1191665779:20020219aa@zn.apmsejq.mongodb.net/medical_digital_twin';
    console.log(`连接数据库: ${mongoUri}`);
    await mongoose.connect(mongoUri);
    console.log('✅ 数据库连接成功\n');

    const db = mongoose.connection.db;

    // 1) 列出所有集合
    console.log('📋 数据库中的所有集合:');
    const collections = await db.listCollections().toArray();
    console.log(`共 ${collections.length} 个集合:`);
    collections.forEach((col, index) => {
      console.log(`${index + 1}. ${col.name} (类型: ${col.type})`);
    });
    console.log();

    // 2) 检查可能包含用户数据的集合
    const userCollections = collections.filter(col => 
      col.name.toLowerCase().includes('user') || 
      col.name.toLowerCase().includes('wx') ||
      col.name.toLowerCase().includes('wechat')
    );

    if (userCollections.length > 0) {
      console.log('👥 可能包含用户数据的集合:');
      for (const col of userCollections) {
        const collection = db.collection(col.name);
        const count = await collection.countDocuments();
        console.log(`- ${col.name}: ${count} 条记录`);
        
        // 如果有数据，显示一条示例记录的结构
        if (count > 0) {
          const sample = await collection.findOne({});
          console.log(`  示例记录结构: ${JSON.stringify(Object.keys(sample), null, 2)}`);
          
          // 检查是否有 phone 字段的记录
          const phoneRecords = await collection.countDocuments({ phone: { $exists: true } });
          const nullPhoneRecords = await collection.countDocuments({ phone: null });
          console.log(`  有 phone 字段的记录: ${phoneRecords}`);
          console.log(`  phone 为 null 的记录: ${nullPhoneRecords}`);
          
          // 检查索引
          const indexes = await collection.indexes();
          console.log(`  索引: ${indexes.map(i => i.name).join(', ')}`);
          
          // 检查是否有 phone 相关索引
          const phoneIndex = indexes.find(i => i.key && i.key.phone);
          if (phoneIndex) {
            console.log(`  phone 索引详情: ${JSON.stringify(phoneIndex, null, 2)}`);
          }
        }
        console.log();
      }
    } else {
      console.log('😅 没有找到明显的用户相关集合');
    }

    // 3) 检查所有集合的大致内容
    console.log('📊 所有集合的记录数统计:');
    for (const col of collections) {
      const collection = db.collection(col.name);
      const count = await collection.countDocuments();
      console.log(`${col.name}: ${count} 条记录`);
    }
    
    console.log('\n🎯 建议:');
    console.log('1. 检查上述输出，找到实际存储微信用户的集合');
    console.log('2. 如果没有用户数据，可能需要先进行数据迁移');
    console.log('3. 如果找到了用户数据但有索引问题，我们可以针对性修复');

  } catch (error) {
    console.error('❌ 检查过程中出错:', error);
    throw error;
  } finally {
    await mongoose.disconnect();
    console.log('\n数据库连接已关闭');
  }
}

// 运行检查
checkDatabase()
  .then(() => {
    console.log('\n✅ 检查完成');
    process.exit(0);
  })
  .catch((error) => {
    console.error('\n❌ 检查失败:', error);
    process.exit(1);
  });